package dao

import (
	"database/sql"
	"fmt"
)

// DAO层设计
var notFoundCode = 40001
var systemErr = 50001

type daoErr struct {
	errNo int
	err   error
}

func (e *daoErr) Error() string {
	return fmt.Sprintf("Error code: %d, Sql Error: %s", e.errNo, e.err.Error())
}

func newDaoErr(errno int, err error) error {
	return &daoErr{errNo: errno, err: err}
}

func Dao(query string) error {
	err := mockQuery()

	if err == sql.ErrNoRows {
		return newDaoErr(notFoundCode, err)
	} else if err != nil {
		return newDaoErr(systemErr, err)
	}

	return nil
}

func mockQuery() error {
	return sql.ErrNoRows
}

func IsNoRow(err error) bool {
	if de, ok := err.(*daoErr); ok && de.errNo == notFoundCode {
		return true
	}
	return false
}
